@@ -6,7 +6,7 @@ from account import views as account_views  | 
            ||
| 6 | 6 | 
                from account import tourguide_views  | 
            
| 7 | 7 | 
                from geo import views as geo_views  | 
            
| 8 | 8 | 
                from group import views as group_views  | 
            
| 9 | 
                -from group import lensman_views, tourguidegroup_views, tourguidegroupuser_views  | 
            |
| 9 | 
                +from group import groupuser_views, lensman_views, tourguidegroup_views, tourguidegroupuser_views  | 
            |
| 10 | 10 | 
                from message import views as message_views  | 
            
| 11 | 11 | 
                from operation import views as op_views  | 
            
| 12 | 12 | 
                from pay import views as pay_views  | 
            
                @@ -63,11 +63,11 @@ urlpatterns += [  | 
            ||
| 63 | 63 | 
                 | 
            
| 64 | 64 | 
                # 群用户相关  | 
            
| 65 | 65 | 
                urlpatterns += [  | 
            
| 66 | 
                - url(r'^g/join$', group_views.group_join_api, name='group_join_api'), # 成员申请加群  | 
            |
| 67 | 
                - url(r'^g/remove$', group_views.group_remove_api, name='group_remove_api'), # 成员移除, 管理员主动, 群成员被动  | 
            |
| 68 | 
                - url(r'^g/quit$', group_views.group_quit_api, name='group_quit_api'), # 成员退出,群成员主动  | 
            |
| 69 | 
                - # url(r'^g/pass$', group_views.group_pass_api, name='group_pass_api'), # 申请通过  | 
            |
| 70 | 
                - # url(r'^g/refuse$', group_views.group_refuse_api, name='group_refuse_api'), # 申请拒绝  | 
            |
| 66 | 
                + url(r'^g/join$', groupuser_views.group_join_api, name='group_join_api'), # 成员申请加群  | 
            |
| 67 | 
                + url(r'^g/remove$', groupuser_views.group_remove_api, name='group_remove_api'), # 成员移除, 管理员主动, 群成员被动  | 
            |
| 68 | 
                + url(r'^g/quit$', groupuser_views.group_quit_api, name='group_quit_api'), # 成员退出,群成员主动  | 
            |
| 69 | 
                + # url(r'^g/pass$', groupuser_views.group_pass_api, name='group_pass_api'), # 申请通过  | 
            |
| 70 | 
                + # url(r'^g/refuse$', groupuser_views.group_refuse_api, name='group_refuse_api'), # 申请拒绝  | 
            |
| 71 | 71 | 
                ]  | 
            
| 72 | 72 | 
                 | 
            
| 73 | 73 | 
                # 旅行团相关  | 
            
                @@ -0,0 +1,240 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +  | 
            |
| 3 | 
                +from __future__ import division  | 
            |
| 4 | 
                +  | 
            |
| 5 | 
                +from django.conf import settings  | 
            |
| 6 | 
                +from logit import logit  | 
            |
| 7 | 
                +from TimeConvert import TimeConvert as tc  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                +from account.models import UserInfo  | 
            |
| 10 | 
                +from group.models import GroupInfo, GroupUserInfo  | 
            |
| 11 | 
                +from utils.error.errno_utils import GroupStatusCode, GroupUserStatusCode, UserStatusCode  | 
            |
| 12 | 
                +from utils.error.response_utils import response  | 
            |
| 13 | 
                +from utils.group_photo_utils import get_current_photos  | 
            |
| 14 | 
                +from utils.redis.rgroup import get_group_info, get_group_users_info, set_group_users_info  | 
            |
| 15 | 
                +from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_USERS_APPLYING_SET, GROUP_USERS_DELETED_SET,  | 
            |
| 16 | 
                + GROUP_USERS_PASSED_SET, GROUP_USERS_QUIT_SET, GROUP_USERS_REFUSED_SET)  | 
            |
| 17 | 
                +  | 
            |
| 18 | 
                +  | 
            |
| 19 | 
                +r = settings.REDIS_CACHE  | 
            |
| 20 | 
                +  | 
            |
| 21 | 
                +  | 
            |
| 22 | 
                +@logit  | 
            |
| 23 | 
                +def group_join_api(request):  | 
            |
| 24 | 
                + """ 申请加群 """  | 
            |
| 25 | 
                +    group_id = request.POST.get('group_id', '')
               | 
            |
| 26 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 27 | 
                +    nickname = request.POST.get('nickname', '')
               | 
            |
| 28 | 
                +  | 
            |
| 29 | 
                + # 用户校验  | 
            |
| 30 | 
                + try:  | 
            |
| 31 | 
                + user = UserInfo.objects.get(user_id=user_id)  | 
            |
| 32 | 
                + except UserInfo.DoesNotExist:  | 
            |
| 33 | 
                + return response(UserStatusCode.USER_NOT_FOUND)  | 
            |
| 34 | 
                +  | 
            |
| 35 | 
                + # 群组校验  | 
            |
| 36 | 
                + try:  | 
            |
| 37 | 
                + group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 38 | 
                + except GroupInfo.DoesNotExist:  | 
            |
| 39 | 
                + return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 40 | 
                +  | 
            |
| 41 | 
                + # 群组锁定校验  | 
            |
| 42 | 
                + if group.group_lock:  | 
            |
| 43 | 
                + return response(GroupStatusCode.GROUP_HAS_LOCKED)  | 
            |
| 44 | 
                +  | 
            |
| 45 | 
                + # 群组用户记录创建,若记录不存在,则创建,若记录已存在,则更新  | 
            |
| 46 | 
                + group_user, created = GroupUserInfo.objects.get_or_create(  | 
            |
| 47 | 
                + group_id=group_id,  | 
            |
| 48 | 
                + user_id=user_id,  | 
            |
| 49 | 
                + )  | 
            |
| 50 | 
                + if group_user.user_status != GroupUserInfo.PASSED:  | 
            |
| 51 | 
                + group_user.current_id = -1 if group.group_from == GroupInfo.SESSION_GROUP else int(r.get(GROUP_LAST_PHOTO_PK % group_id) or -1)  | 
            |
| 52 | 
                + group_user.nickname = nickname or user.final_nickname  | 
            |
| 53 | 
                + group_user.avatar = user.avatar  | 
            |
| 54 | 
                + # group_user.admin = False # Admin Field Default False, Should Not Assign  | 
            |
| 55 | 
                + group_user.user_status = GroupUserInfo.PASSED  | 
            |
| 56 | 
                + group_user.passed_at = tc.utc_datetime()  | 
            |
| 57 | 
                + group_user.save()  | 
            |
| 58 | 
                +  | 
            |
| 59 | 
                + # Redis 群组用户数据缓存  | 
            |
| 60 | 
                + set_group_users_info(group)  | 
            |
| 61 | 
                +  | 
            |
| 62 | 
                + # Redis 群组通过集合缓存  | 
            |
| 63 | 
                + r.srem(GROUP_USERS_REFUSED_SET % group_id, user_id)  | 
            |
| 64 | 
                + r.srem(GROUP_USERS_DELETED_SET % group_id, user_id)  | 
            |
| 65 | 
                + r.srem(GROUP_USERS_QUIT_SET % group_id, user_id)  | 
            |
| 66 | 
                + r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id)  | 
            |
| 67 | 
                +  | 
            |
| 68 | 
                + curinfo = get_current_photos(group_id, user_id, group_user.current_id)  | 
            |
| 69 | 
                +  | 
            |
| 70 | 
                +    return response(200, 'Apply Success', u'申请成功', {
               | 
            |
| 71 | 
                +        'current_id': curinfo.get('current_id', ''),
               | 
            |
| 72 | 
                +        'photos': curinfo.get('photos', ''),
               | 
            |
| 73 | 
                + 'group_id': group_id,  | 
            |
| 74 | 
                + 'group': get_group_info(group_id),  | 
            |
| 75 | 
                + 'user_id': user_id,  | 
            |
| 76 | 
                + 'users': get_group_users_info(group_id, user_id),  | 
            |
| 77 | 
                + })  | 
            |
| 78 | 
                +  | 
            |
| 79 | 
                +  | 
            |
| 80 | 
                +@logit  | 
            |
| 81 | 
                +def group_remove_api(request):  | 
            |
| 82 | 
                + """ 成员移除 """  | 
            |
| 83 | 
                +    group_id = request.POST.get('group_id', '')
               | 
            |
| 84 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 85 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 86 | 
                +  | 
            |
| 87 | 
                + # 群组校验  | 
            |
| 88 | 
                + try:  | 
            |
| 89 | 
                + group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 90 | 
                + except GroupInfo.DoesNotExist:  | 
            |
| 91 | 
                + return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 92 | 
                +  | 
            |
| 93 | 
                + # 权限校验  | 
            |
| 94 | 
                + if group.admin_id != admin_id or group.admin_id == user_id: # 管理员也不允许将自己移除  | 
            |
| 95 | 
                + return response(GroupStatusCode.NO_REMOVE_PERMISSION)  | 
            |
| 96 | 
                +  | 
            |
| 97 | 
                + # 群组用户校验  | 
            |
| 98 | 
                + try:  | 
            |
| 99 | 
                + group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)  | 
            |
| 100 | 
                + except GroupUserInfo.DoesNotExist:  | 
            |
| 101 | 
                + return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)  | 
            |
| 102 | 
                +  | 
            |
| 103 | 
                + # 群组用户移除  | 
            |
| 104 | 
                + group_user.user_status = GroupUserInfo.DELETED  | 
            |
| 105 | 
                + group_user.deleted_at = tc.utc_datetime()  | 
            |
| 106 | 
                + group_user.save()  | 
            |
| 107 | 
                +  | 
            |
| 108 | 
                + # Redis 群组数据缓存更新  | 
            |
| 109 | 
                + group_users = set_group_users_info(group)  | 
            |
| 110 | 
                +  | 
            |
| 111 | 
                + # Redis 群组删除集合缓存  | 
            |
| 112 | 
                + r.srem(GROUP_USERS_PASSED_SET % group_id, user_id)  | 
            |
| 113 | 
                + r.sadd(GROUP_USERS_DELETED_SET % group_id, user_id)  | 
            |
| 114 | 
                +  | 
            |
| 115 | 
                +    return response(200, 'Remove Success', u'用户移除成功', {
               | 
            |
| 116 | 
                + 'group_id': group_id,  | 
            |
| 117 | 
                + 'users': group_users,  | 
            |
| 118 | 
                + })  | 
            |
| 119 | 
                +  | 
            |
| 120 | 
                +  | 
            |
| 121 | 
                +@logit  | 
            |
| 122 | 
                +def group_quit_api(request):  | 
            |
| 123 | 
                + """ 成员退出 """  | 
            |
| 124 | 
                +    group_id = request.POST.get('group_id', '')
               | 
            |
| 125 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 126 | 
                +  | 
            |
| 127 | 
                + # 群组校验  | 
            |
| 128 | 
                + try:  | 
            |
| 129 | 
                + group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 130 | 
                + except GroupInfo.DoesNotExist:  | 
            |
| 131 | 
                + return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 132 | 
                +  | 
            |
| 133 | 
                + # 权限校验  | 
            |
| 134 | 
                + if group.admin_id == user_id: # 管理员也不允许自己退出  | 
            |
| 135 | 
                + return response(GroupStatusCode.NO_QUIT_PERMISSION)  | 
            |
| 136 | 
                +  | 
            |
| 137 | 
                + # 群组用户校验  | 
            |
| 138 | 
                + try:  | 
            |
| 139 | 
                + group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)  | 
            |
| 140 | 
                + except GroupUserInfo.DoesNotExist:  | 
            |
| 141 | 
                + return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)  | 
            |
| 142 | 
                +  | 
            |
| 143 | 
                + # 群组用户移除  | 
            |
| 144 | 
                + group_user.user_status = GroupUserInfo.QUIT  | 
            |
| 145 | 
                + group_user.quit_at = tc.utc_datetime()  | 
            |
| 146 | 
                + group_user.save()  | 
            |
| 147 | 
                +  | 
            |
| 148 | 
                + # Redis 群组数据缓存更新  | 
            |
| 149 | 
                + group_users = set_group_users_info(group)  | 
            |
| 150 | 
                +  | 
            |
| 151 | 
                + # Redis 群组删除集合缓存  | 
            |
| 152 | 
                + r.srem(GROUP_USERS_PASSED_SET % group_id, user_id)  | 
            |
| 153 | 
                + r.sadd(GROUP_USERS_QUIT_SET % group_id, user_id)  | 
            |
| 154 | 
                +  | 
            |
| 155 | 
                +    return response(200, 'Quit Success', u'用户退出成功', {
               | 
            |
| 156 | 
                + 'group_id': group_id,  | 
            |
| 157 | 
                + 'users': group_users,  | 
            |
| 158 | 
                + })  | 
            |
| 159 | 
                +  | 
            |
| 160 | 
                +  | 
            |
| 161 | 
                +@logit  | 
            |
| 162 | 
                +def group_pass_api(request):  | 
            |
| 163 | 
                + """ 申请通过 """  | 
            |
| 164 | 
                +    group_id = request.POST.get('group_id', '')
               | 
            |
| 165 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 166 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 167 | 
                +  | 
            |
| 168 | 
                + # 群组校验  | 
            |
| 169 | 
                + try:  | 
            |
| 170 | 
                + group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 171 | 
                + except GroupInfo.DoesNotExist:  | 
            |
| 172 | 
                + return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 173 | 
                +  | 
            |
| 174 | 
                + # 权限校验  | 
            |
| 175 | 
                + if group.admin_id != admin_id:  | 
            |
| 176 | 
                + return response(GroupStatusCode.NO_PASS_PERMISSION)  | 
            |
| 177 | 
                +  | 
            |
| 178 | 
                + # 群组用户校验  | 
            |
| 179 | 
                + try:  | 
            |
| 180 | 
                + group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)  | 
            |
| 181 | 
                + except GroupUserInfo.DoesNotExist:  | 
            |
| 182 | 
                + return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND)  | 
            |
| 183 | 
                +  | 
            |
| 184 | 
                + # 群组用户通过  | 
            |
| 185 | 
                + group_user.user_status = GroupUserInfo.PASSED  | 
            |
| 186 | 
                + group_user.passed_at = tc.utc_datetime()  | 
            |
| 187 | 
                + group_user.save()  | 
            |
| 188 | 
                +  | 
            |
| 189 | 
                + # Redis 群组数据缓存更新  | 
            |
| 190 | 
                + group_users = set_group_users_info(group)  | 
            |
| 191 | 
                +  | 
            |
| 192 | 
                + # Redis 群组通过集合缓存  | 
            |
| 193 | 
                + r.srem(GROUP_USERS_APPLYING_SET % group_id, user_id)  | 
            |
| 194 | 
                + r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id)  | 
            |
| 195 | 
                +  | 
            |
| 196 | 
                +    return response(200, 'Pass Success', u'申请通过成功', {
               | 
            |
| 197 | 
                + 'group_id': group_id,  | 
            |
| 198 | 
                + 'users': group_users,  | 
            |
| 199 | 
                + })  | 
            |
| 200 | 
                +  | 
            |
| 201 | 
                +  | 
            |
| 202 | 
                +@logit  | 
            |
| 203 | 
                +def group_refuse_api(request):  | 
            |
| 204 | 
                + """ 申请拒绝 """  | 
            |
| 205 | 
                +    group_id = request.POST.get('group_id', '')
               | 
            |
| 206 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 207 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 208 | 
                +  | 
            |
| 209 | 
                + # 群组校验  | 
            |
| 210 | 
                + try:  | 
            |
| 211 | 
                + group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 212 | 
                + except GroupInfo.DoesNotExist:  | 
            |
| 213 | 
                + return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 214 | 
                +  | 
            |
| 215 | 
                + # 权限校验  | 
            |
| 216 | 
                + if group.admin_id != admin_id:  | 
            |
| 217 | 
                + return response(GroupStatusCode.NO_REFUSE_PERMISSION)  | 
            |
| 218 | 
                +  | 
            |
| 219 | 
                + # 群组用户校验  | 
            |
| 220 | 
                + try:  | 
            |
| 221 | 
                + group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)  | 
            |
| 222 | 
                + except GroupUserInfo.DoesNotExist:  | 
            |
| 223 | 
                + return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND)  | 
            |
| 224 | 
                +  | 
            |
| 225 | 
                + # 群组用户拒绝  | 
            |
| 226 | 
                + group_user.user_status = GroupUserInfo.REFUSED  | 
            |
| 227 | 
                + group_user.refused_at = tc.utc_datetime()  | 
            |
| 228 | 
                + group_user.save()  | 
            |
| 229 | 
                +  | 
            |
| 230 | 
                + # Redis 群组数据缓存更新  | 
            |
| 231 | 
                + group_users = set_group_users_info(group)  | 
            |
| 232 | 
                +  | 
            |
| 233 | 
                + # Redis 群组拒绝集合缓存  | 
            |
| 234 | 
                + r.srem(GROUP_USERS_APPLYING_SET % group_id, user_id)  | 
            |
| 235 | 
                + r.sadd(GROUP_USERS_REFUSED_SET % group_id, user_id)  | 
            |
| 236 | 
                +  | 
            |
| 237 | 
                +    return response(200, 'Refuse Success', u'申请拒绝成功', {
               | 
            |
| 238 | 
                + 'group_id': group_id,  | 
            |
| 239 | 
                + 'users': group_users,  | 
            |
| 240 | 
                + })  | 
            
                @@ -28,9 +28,8 @@ from utils.redis.rgroup import (del_group_photo_thumbup_flag, get_group_info, ge  | 
            ||
| 28 | 28 | 
                get_group_photo_watchers, get_group_users_info, set_group_info,  | 
            
| 29 | 29 | 
                set_group_photo_comment_list, set_group_photo_data, set_group_photo_thumbup_flag,  | 
            
| 30 | 30 | 
                set_group_photo_thumbup_list, set_group_users_info)  | 
            
| 31 | 
                -from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_PHOTO_WATCHER_SET, GROUP_USERS_APPLYING_SET,  | 
            |
| 32 | 
                - GROUP_USERS_DELETED_SET, GROUP_USERS_PASSED_SET, GROUP_USERS_QUIT_SET,  | 
            |
| 33 | 
                - GROUP_USERS_REFUSED_SET, LENSMAN_PHOTO_HAGGLE_TIMES, LENSMAN_PHOTO_PRICE)  | 
            |
| 31 | 
                +from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_PHOTO_WATCHER_SET, GROUP_USERS_PASSED_SET,  | 
            |
| 32 | 
                + LENSMAN_PHOTO_HAGGLE_TIMES, LENSMAN_PHOTO_PRICE)  | 
            |
| 34 | 33 | 
                from utils.redis.rorder import get_lensman_order_record  | 
            
| 35 | 34 | 
                from utils.redis.rprice import get_lensman_price_fixed  | 
            
| 36 | 35 | 
                from utils.sql.raw import PAI2_HOME_API  | 
            
                @@ -177,64 +176,6 @@ def group_list_api(request):  | 
            ||
| 177 | 176 | 
                 | 
            
| 178 | 177 | 
                 | 
            
| 179 | 178 | 
                @logit  | 
            
| 180 | 
                -def group_join_api(request):  | 
            |
| 181 | 
                - """ 申请加群 """  | 
            |
| 182 | 
                -    group_id = request.POST.get('group_id', '')
               | 
            |
| 183 | 
                -    user_id = request.POST.get('user_id', '')
               | 
            |
| 184 | 
                -    nickname = request.POST.get('nickname', '')
               | 
            |
| 185 | 
                -  | 
            |
| 186 | 
                - # 用户校验  | 
            |
| 187 | 
                - try:  | 
            |
| 188 | 
                - user = UserInfo.objects.get(user_id=user_id)  | 
            |
| 189 | 
                - except UserInfo.DoesNotExist:  | 
            |
| 190 | 
                - return response(UserStatusCode.USER_NOT_FOUND)  | 
            |
| 191 | 
                -  | 
            |
| 192 | 
                - # 群组校验  | 
            |
| 193 | 
                - try:  | 
            |
| 194 | 
                - group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 195 | 
                - except GroupInfo.DoesNotExist:  | 
            |
| 196 | 
                - return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 197 | 
                -  | 
            |
| 198 | 
                - # 群组锁定校验  | 
            |
| 199 | 
                - if group.group_lock:  | 
            |
| 200 | 
                - return response(GroupStatusCode.GROUP_HAS_LOCKED)  | 
            |
| 201 | 
                -  | 
            |
| 202 | 
                - # 群组用户记录创建,若记录不存在,则创建,若记录已存在,则更新  | 
            |
| 203 | 
                - group_user, created = GroupUserInfo.objects.get_or_create(  | 
            |
| 204 | 
                - group_id=group_id,  | 
            |
| 205 | 
                - user_id=user_id,  | 
            |
| 206 | 
                - )  | 
            |
| 207 | 
                - if group_user.user_status != GroupUserInfo.PASSED:  | 
            |
| 208 | 
                - group_user.current_id = -1 if group.group_from == GroupInfo.SESSION_GROUP else int(r.get(GROUP_LAST_PHOTO_PK % group_id) or -1)  | 
            |
| 209 | 
                - group_user.nickname = nickname or user.final_nickname  | 
            |
| 210 | 
                - group_user.avatar = user.avatar  | 
            |
| 211 | 
                - # group_user.admin = False # Admin Field Default False, Should Not Assign  | 
            |
| 212 | 
                - group_user.user_status = GroupUserInfo.PASSED  | 
            |
| 213 | 
                - group_user.passed_at = tc.utc_datetime()  | 
            |
| 214 | 
                - group_user.save()  | 
            |
| 215 | 
                -  | 
            |
| 216 | 
                - # Redis 群组用户数据缓存  | 
            |
| 217 | 
                - set_group_users_info(group)  | 
            |
| 218 | 
                -  | 
            |
| 219 | 
                - # Redis 群组通过集合缓存  | 
            |
| 220 | 
                - r.srem(GROUP_USERS_REFUSED_SET % group_id, user_id)  | 
            |
| 221 | 
                - r.srem(GROUP_USERS_DELETED_SET % group_id, user_id)  | 
            |
| 222 | 
                - r.srem(GROUP_USERS_QUIT_SET % group_id, user_id)  | 
            |
| 223 | 
                - r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id)  | 
            |
| 224 | 
                -  | 
            |
| 225 | 
                - curinfo = get_current_photos(group_id, user_id, group_user.current_id)  | 
            |
| 226 | 
                -  | 
            |
| 227 | 
                -    return response(200, 'Apply Success', u'申请成功', {
               | 
            |
| 228 | 
                -        'current_id': curinfo.get('current_id', ''),
               | 
            |
| 229 | 
                -        'photos': curinfo.get('photos', ''),
               | 
            |
| 230 | 
                - 'group_id': group_id,  | 
            |
| 231 | 
                - 'group': get_group_info(group_id),  | 
            |
| 232 | 
                - 'user_id': user_id,  | 
            |
| 233 | 
                - 'users': get_group_users_info(group_id, user_id),  | 
            |
| 234 | 
                - })  | 
            |
| 235 | 
                -  | 
            |
| 236 | 
                -  | 
            |
| 237 | 
                -@logit  | 
            |
| 238 | 179 | 
                def group_lock_api(request):  | 
            
| 239 | 180 | 
                """ 群组锁定 """  | 
            
| 240 | 181 | 
                     group_id = request.POST.get('group_id', '')
               | 
            
                @@ -287,169 +228,6 @@ def group_unlock_api(request):  | 
            ||
| 287 | 228 | 
                 | 
            
| 288 | 229 | 
                 | 
            
| 289 | 230 | 
                @logit  | 
            
| 290 | 
                -def group_remove_api(request):  | 
            |
| 291 | 
                - """ 成员移除 """  | 
            |
| 292 | 
                -    group_id = request.POST.get('group_id', '')
               | 
            |
| 293 | 
                -    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 294 | 
                -    user_id = request.POST.get('user_id', '')
               | 
            |
| 295 | 
                -  | 
            |
| 296 | 
                - # 群组校验  | 
            |
| 297 | 
                - try:  | 
            |
| 298 | 
                - group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 299 | 
                - except GroupInfo.DoesNotExist:  | 
            |
| 300 | 
                - return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 301 | 
                -  | 
            |
| 302 | 
                - # 权限校验  | 
            |
| 303 | 
                - if group.admin_id != admin_id or group.admin_id == user_id: # 管理员也不允许将自己移除  | 
            |
| 304 | 
                - return response(GroupStatusCode.NO_REMOVE_PERMISSION)  | 
            |
| 305 | 
                -  | 
            |
| 306 | 
                - # 群组用户校验  | 
            |
| 307 | 
                - try:  | 
            |
| 308 | 
                - group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)  | 
            |
| 309 | 
                - except GroupUserInfo.DoesNotExist:  | 
            |
| 310 | 
                - return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)  | 
            |
| 311 | 
                -  | 
            |
| 312 | 
                - # 群组用户移除  | 
            |
| 313 | 
                - group_user.user_status = GroupUserInfo.DELETED  | 
            |
| 314 | 
                - group_user.deleted_at = tc.utc_datetime()  | 
            |
| 315 | 
                - group_user.save()  | 
            |
| 316 | 
                -  | 
            |
| 317 | 
                - # Redis 群组数据缓存更新  | 
            |
| 318 | 
                - group_users = set_group_users_info(group)  | 
            |
| 319 | 
                -  | 
            |
| 320 | 
                - # Redis 群组删除集合缓存  | 
            |
| 321 | 
                - r.srem(GROUP_USERS_PASSED_SET % group_id, user_id)  | 
            |
| 322 | 
                - r.sadd(GROUP_USERS_DELETED_SET % group_id, user_id)  | 
            |
| 323 | 
                -  | 
            |
| 324 | 
                -    return response(200, 'Remove Success', u'用户移除成功', {
               | 
            |
| 325 | 
                - 'group_id': group_id,  | 
            |
| 326 | 
                - 'users': group_users,  | 
            |
| 327 | 
                - })  | 
            |
| 328 | 
                -  | 
            |
| 329 | 
                -  | 
            |
| 330 | 
                -@logit  | 
            |
| 331 | 
                -def group_quit_api(request):  | 
            |
| 332 | 
                - """ 成员退出 """  | 
            |
| 333 | 
                -    group_id = request.POST.get('group_id', '')
               | 
            |
| 334 | 
                -    user_id = request.POST.get('user_id', '')
               | 
            |
| 335 | 
                -  | 
            |
| 336 | 
                - # 群组校验  | 
            |
| 337 | 
                - try:  | 
            |
| 338 | 
                - group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 339 | 
                - except GroupInfo.DoesNotExist:  | 
            |
| 340 | 
                - return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 341 | 
                -  | 
            |
| 342 | 
                - # 权限校验  | 
            |
| 343 | 
                - if group.admin_id == user_id: # 管理员也不允许自己退出  | 
            |
| 344 | 
                - return response(GroupStatusCode.NO_QUIT_PERMISSION)  | 
            |
| 345 | 
                -  | 
            |
| 346 | 
                - # 群组用户校验  | 
            |
| 347 | 
                - try:  | 
            |
| 348 | 
                - group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)  | 
            |
| 349 | 
                - except GroupUserInfo.DoesNotExist:  | 
            |
| 350 | 
                - return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)  | 
            |
| 351 | 
                -  | 
            |
| 352 | 
                - # 群组用户移除  | 
            |
| 353 | 
                - group_user.user_status = GroupUserInfo.QUIT  | 
            |
| 354 | 
                - group_user.quit_at = tc.utc_datetime()  | 
            |
| 355 | 
                - group_user.save()  | 
            |
| 356 | 
                -  | 
            |
| 357 | 
                - # Redis 群组数据缓存更新  | 
            |
| 358 | 
                - group_users = set_group_users_info(group)  | 
            |
| 359 | 
                -  | 
            |
| 360 | 
                - # Redis 群组删除集合缓存  | 
            |
| 361 | 
                - r.srem(GROUP_USERS_PASSED_SET % group_id, user_id)  | 
            |
| 362 | 
                - r.sadd(GROUP_USERS_QUIT_SET % group_id, user_id)  | 
            |
| 363 | 
                -  | 
            |
| 364 | 
                -    return response(200, 'Quit Success', u'用户退出成功', {
               | 
            |
| 365 | 
                - 'group_id': group_id,  | 
            |
| 366 | 
                - 'users': group_users,  | 
            |
| 367 | 
                - })  | 
            |
| 368 | 
                -  | 
            |
| 369 | 
                -  | 
            |
| 370 | 
                -@logit  | 
            |
| 371 | 
                -def group_pass_api(request):  | 
            |
| 372 | 
                - """ 申请通过 """  | 
            |
| 373 | 
                -    group_id = request.POST.get('group_id', '')
               | 
            |
| 374 | 
                -    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 375 | 
                -    user_id = request.POST.get('user_id', '')
               | 
            |
| 376 | 
                -  | 
            |
| 377 | 
                - # 群组校验  | 
            |
| 378 | 
                - try:  | 
            |
| 379 | 
                - group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 380 | 
                - except GroupInfo.DoesNotExist:  | 
            |
| 381 | 
                - return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 382 | 
                -  | 
            |
| 383 | 
                - # 权限校验  | 
            |
| 384 | 
                - if group.admin_id != admin_id:  | 
            |
| 385 | 
                - return response(GroupStatusCode.NO_PASS_PERMISSION)  | 
            |
| 386 | 
                -  | 
            |
| 387 | 
                - # 群组用户校验  | 
            |
| 388 | 
                - try:  | 
            |
| 389 | 
                - group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)  | 
            |
| 390 | 
                - except GroupUserInfo.DoesNotExist:  | 
            |
| 391 | 
                - return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND)  | 
            |
| 392 | 
                -  | 
            |
| 393 | 
                - # 群组用户通过  | 
            |
| 394 | 
                - group_user.user_status = GroupUserInfo.PASSED  | 
            |
| 395 | 
                - group_user.passed_at = tc.utc_datetime()  | 
            |
| 396 | 
                - group_user.save()  | 
            |
| 397 | 
                -  | 
            |
| 398 | 
                - # Redis 群组数据缓存更新  | 
            |
| 399 | 
                - group_users = set_group_users_info(group)  | 
            |
| 400 | 
                -  | 
            |
| 401 | 
                - # Redis 群组通过集合缓存  | 
            |
| 402 | 
                - r.srem(GROUP_USERS_APPLYING_SET % group_id, user_id)  | 
            |
| 403 | 
                - r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id)  | 
            |
| 404 | 
                -  | 
            |
| 405 | 
                -    return response(200, 'Pass Success', u'申请通过成功', {
               | 
            |
| 406 | 
                - 'group_id': group_id,  | 
            |
| 407 | 
                - 'users': group_users,  | 
            |
| 408 | 
                - })  | 
            |
| 409 | 
                -  | 
            |
| 410 | 
                -  | 
            |
| 411 | 
                -@logit  | 
            |
| 412 | 
                -def group_refuse_api(request):  | 
            |
| 413 | 
                - """ 申请拒绝 """  | 
            |
| 414 | 
                -    group_id = request.POST.get('group_id', '')
               | 
            |
| 415 | 
                -    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 416 | 
                -    user_id = request.POST.get('user_id', '')
               | 
            |
| 417 | 
                -  | 
            |
| 418 | 
                - # 群组校验  | 
            |
| 419 | 
                - try:  | 
            |
| 420 | 
                - group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 421 | 
                - except GroupInfo.DoesNotExist:  | 
            |
| 422 | 
                - return response(GroupStatusCode.GROUP_NOT_FOUND)  | 
            |
| 423 | 
                -  | 
            |
| 424 | 
                - # 权限校验  | 
            |
| 425 | 
                - if group.admin_id != admin_id:  | 
            |
| 426 | 
                - return response(GroupStatusCode.NO_REFUSE_PERMISSION)  | 
            |
| 427 | 
                -  | 
            |
| 428 | 
                - # 群组用户校验  | 
            |
| 429 | 
                - try:  | 
            |
| 430 | 
                - group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)  | 
            |
| 431 | 
                - except GroupUserInfo.DoesNotExist:  | 
            |
| 432 | 
                - return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND)  | 
            |
| 433 | 
                -  | 
            |
| 434 | 
                - # 群组用户拒绝  | 
            |
| 435 | 
                - group_user.user_status = GroupUserInfo.REFUSED  | 
            |
| 436 | 
                - group_user.refused_at = tc.utc_datetime()  | 
            |
| 437 | 
                - group_user.save()  | 
            |
| 438 | 
                -  | 
            |
| 439 | 
                - # Redis 群组数据缓存更新  | 
            |
| 440 | 
                - group_users = set_group_users_info(group)  | 
            |
| 441 | 
                -  | 
            |
| 442 | 
                - # Redis 群组拒绝集合缓存  | 
            |
| 443 | 
                - r.srem(GROUP_USERS_APPLYING_SET % group_id, user_id)  | 
            |
| 444 | 
                - r.sadd(GROUP_USERS_REFUSED_SET % group_id, user_id)  | 
            |
| 445 | 
                -  | 
            |
| 446 | 
                -    return response(200, 'Refuse Success', u'申请拒绝成功', {
               | 
            |
| 447 | 
                - 'group_id': group_id,  | 
            |
| 448 | 
                - 'users': group_users,  | 
            |
| 449 | 
                - })  | 
            |
| 450 | 
                -  | 
            |
| 451 | 
                -  | 
            |
| 452 | 
                -@logit  | 
            |
| 453 | 231 | 
                def group_data_api(request):  | 
            
| 454 | 232 | 
                """ 群组数据, 评论数, 点赞数 """  | 
            
| 455 | 233 | 
                     group_id = request.POST.get('group_id', '')
               |